#ifndef DATASTORE_H
#define DATASTORE_H

#include "stable.h"

class DataStore
{
public:
    DataStore();
    QList<Inmersion*> inmersiones( quint32 idbuceador ) const { return _inmersiones.values( idbuceador ); }
    QList<Pais*> paises() const { return _paises.values(); }
    QList<Ubicacion*> ubicaciones() const { return _ubicaciones.values(); }
    QList<Sitio*> sitios() const { return _sitios.values(); }
    QList<Buceador*> buceadores() const { return _buceadores.values(); }
    void loadInmersiones( Buceador* buceador, quint32 idbuceador = 0 );
    void deleteInmersion( Inmersion* inmersion );
    Buceador* buceador( quint32 idbuceador ) const { return _buceadores.value( idbuceador ); }
    Buceador* buceador( const QString& usuario ) const;
    QString getMapUrl( quint32 id ) const;
    void importXml( Buceador* buceador, const QString& filepath, bool createnew = false );
private:
    void loadBuceadores();
    void loadBuddies();
    void loadPaises();
    void loadUbicaciones();
    void loadSitios();
    void loadViajes();
    void loadMuestras( Inmersion* inmersion, quint32 idinmersion );
    void loadEstadisticas( Estadisticas* estadisticas, quint32 idbuceador );
    void createDb( const QString& dbfile );
    quint32 insertInmersion( const QDateTime& inicio,
                             quint32 duracion,
                             quint32 idsitio,
                             quint32 idbuceador,
                             quint32 intervalosuperficie,
                             qreal profundidadmaxima,
                             qreal profundidadmedia,
                             const qnuint& temperaturaaire,
                             const qnuint& temperaturasuperficie,
                             const qnuint& temperaturafondo,
                             const qnuint& volumenbotella,
                             const qnuint& presioninicial,
                             const qnuint& presionfinal,
                             qreal lastre,
                             quint32 porcentajeo2,
                             quint32 idbuddy,
                             quint32 idviaje );
    quint32 findInmersion( const QDateTime& inicio );
    quint32 findPreviousInmersion( const QDateTime& inicio );
    quint32 findSitio( const QString& sitionombre, const QString ubicacionnombre );
    quint32 findBuceador( Buceador* buceador );
    quint32 findBuddy( const QString& buddynombre );
    QSqlDatabase _db;
    QMap<quint32,Buceador*> _buceadores;
    QHash<quint32,Inmersion*> _inmersiones;
    QHash<quint32,Pais*> _paises;
    QHash<quint32,Ubicacion*> _ubicaciones;
    QHash<quint32,Sitio*> _sitios;
    QHash<quint32,Buddy*> _buddies;
    QHash<quint32,Viaje*> _viajes;
};

#endif // DATASTORE_H
